Programming Assignment Policies
1 Purpose of Programming Assignments in this Course
In this course, programming assignments are primarily an
instructional mechanism, not an assessment mechanism. Nonetheless,
programming assignments will be graded and, in fact, will be graded
strictly. There are two reasons for this. First, the grades will
provide you with an assessment of how well you know the
material. Second, experience has shown that beginning Computer Science
students do not always make decisions that are in their own best
interest, and often do not complete ungraded assignments.
In other words, in this course, programming assignments are designed
to: (1) help you learn the materials; (2) help you understand what you
have and have not learned; and (3) encourage you to do the work that
is necessary for learning to occur.
2 Collaboration
Different courses have different policies about collaboration
on programming programming assignments. This document describes the
policy for Prof. Bernstein's sections of this course during this semester
only. Be careful to understand and comply with the policies
that are in place for your other courses.
2.1 Rationale for the Collaboration Policy
Unambiguously, the best way for you to achieve the second
objective above is for you to complete programming assignments
entirely on your own, occasionally asking questions of a general
nature (i.e., about the topics you need to understand in order
to complete assignment but not specifics about the assignment
itself). However, for some students, collaboration aids in
achieving the first objective.
2.2 Allowed Interactions
You may discuss programming assignments with the instructor(s)
for this course, instructors for other courses, lab
assistant(s), and other students currently enrolled in this
course.
2.3 Inappropriate Interactions
You must not discuss programming assignments with students
who are not currently enrolled in this course (except for the
designated lab assistants, if any).
Also, you must not discuss programming assignments with tutors
of any kind – paid or volunteer, local or remote. Similarly, you
must not use code from any source, whether human (e.g.,
"mechanical turk") or not (e.g., AI-based code generators), that
was created based on information that is specific to the
assignment (e.g., specifications, function/method/class
declarations). When in doubt, assume that code obtained from the
Internet must not be used.
Finally, you must not make your solutions to programming
assignments available in any form on any WWW sites, solution
archives, etc...
Failure to comply with these policies is a violation of the
JMU Honor Code. Automated tools (like, for example,
Moss) may
be used on any submission (including "early" submissions), at
any time, to detect violations of this policy.
2.4 Recommended Interactions
You are strongly encouraged to discuss the assignment with
the instructor(s) and lab assistant(s) only (if any), and to
submit work that is entirely your own.
Assistance can be a crutch that actually hinders learning.
You will be much more successful at learning the material
in this course if you complete the programming assignments
independently [with, perhaps, assistance from the instructor(s)
and/or lab assistant(s)]. Though you may lose some points on
the programming assignments if you take this approach, it will
almost certainly help you on exams (which are a much larger
portion of the final grade).
2.5 Attribution
If you receive assistance (whether from a person, book, WWW
page, or other source) you should make a note of it in the block
comments for the relevant class(es) and/or method(s). That is,
you should give attribution/credit to the source of the
assistance
at the time the assistance is given.
In addition to being an essential part of
intellectual honesty, this will help you assess your
performance/achievements/understanding.
Since assistance/collaboration can take many forms, so too can the
way in which you give attribution credit. Some common examples
include:
I received help in understanding ___ from ___.
I received help in writing the algorithm (but not the code)
for ___ from ___.
I received help in identifying a defect in ___ from ___.
I received help in correcting a defect in ___ from ___.
I received help in writing the code for ___ from ___.
I received step-by-step instructions on how to write
the code for ___ from ___.
___ and I wrote the code for ___ together.
The code for ___ was written by/obtained from ___.
2.6 Courtesy/Etiquette
Though you are entitled to discuss the programming assignments
with other people, you must be courteous.
Most importantly, students are not required, or even
encouraged, to provide assistance. So, if asked, you should feel
free to decline such a request and, if asking, you must not take
offense if such a request is denied.
In addition, neither the instructor(s) nor lab assistant(s)
(if any) may provide as much assistance as you want. Most
frequently, this happens when they think the assistance you
have requested will prevent you from learning an important
concept. Sometimes, this happens when they think you are using
too much of their time. Again, you must not take offense if a
request is denied.
3 Multi-Part Assignments
Some programming assignments may have multiple parts. Multi-part
programming assignments must be completed in order. That is,
before starting Part \(i+1\) you must first successfully
submit Part \(i\) (even if it is past the submission deadline
for that part).
Some multi-part assignments may have different due dates for
different parts (to force you to start early and, hopefully, learn
the benefits of starting early). Other multi-part assignments may
have one due date for all of the parts (to give you more
flexibility; hopefully you will still start early and submit the
different parts as you complete them).
4 Submission
Obviously, all of the programming assignments will involve the
construction of code. The code must be submitted electronically using
Autolab.
In addition, parts of some programming assignments may require you
to answer questions of various kinds. These parts must be
submitted using Canvas.
4.1 Number of Autolab Submissions
Autolab is a submission tool, not a testing tool. That is, it
tests your code for purposes of assessment, not to verify the
correctness of your code and not to help you debug your
code. Testing and debugging are an important part of the
software engineering process, and you must be able to test and
debug software in order to succeed in this course (not to
mention subsequent courses and as a practicing
programmer/software engineer).
To prevent you from relying on Autolab too heavily, individual
assignments may have a maximum number of submissions (perhaps
after a certain date) and/or points may be deducted for each
submission.
You are responsible for knowing the submission rules for each
assignment. In general, your last submission is the one that
will be graded.
4.2 Timing of Autolab Submissions
You are responsible for ensuring that your assignments are
submitted on time. You should be aware that electronic
submission systems may only be able to process a few submissions
per minute. This means that, when there are hundreds of students
in different courses submitting at the same time, it might take
an hour or more for a submission to be processed.
Your submission must be processed/checked by Autolab before the
time that it is due. It is not enough to have it "in the
queue" before the deadline.
In other words, you must recognize that the system might be
severely congested and submit yout code early enough that the
processing time will not be a problem. (This is not unlike a
situation in which you need to be someplace at a specific time
and you know that the roads might be congested. You are
responsible for departing early enough; you must select a
departure time that accounts for the congestion.)
5 Grading
Points will be deducted for a variety of reasons, including:
incorrect answers, failing the tests conducted as part of the
electronic submission process, failing to conform to the course
style guide, failing to be properly documented, poor design, poor
implementation, and inelegance. Each assignment will include a
description of the criteria that will be used for it.
Some criteria will be graded by the submission system (when you
submit) and others will be graded by the instructor after the
due date. Note that the grade awarded by the submission system is an
estimate, not a guarantee. In other words, the grade awarded by
the submission system may be modified by the instructor.
The course syllabus indicates whether late submissions will be
accepted (and the associated penalties).
6 Definitions
Terms, equations, concepts, etc... often have multiple definitions.
Whenever there is any ambiguity, you must use the definitions that
are provided with the assignment.
7 Going Further
Programming assignments sometimes give you an opportunity to "Go
Further". The questions/problems/tasks in the "Going Further"
section are neither required nor for extra credit. They are an
optional way for you to either: challenge yourself, gain a deeper
understanding of the material in the programming assignment, or
gain experience with material that was not covered in the
programming assignment. You may choose to complete all, some, or
none of them; it is entirely up to you.